#####################################################################################
# 题目四：a,b,c,d四名犯罪嫌疑人，其中有一个是小偷，收到审讯。a说我不是小偷，b说c是小偷，c说小偷肯定是d，d说c胡说，其中三个人说的是实话，一个人说的是假话。问谁是小偷
##用0,1的矩阵去保存信息，0代表该列对应的人不是小偷，1代表该列对应的人是小偷。因此在该题目中的矩阵为：矩阵的行代表自己对别人的评价，列代表别人对自己的评价
'''
0 1 1 1;
0 0 1 0;
0 0 0 1;
1 1 1 0;
'''
###又因为有3个人说的是真话，因此只需要找到某一列上有3个为1的即可。很明显第三列是3个1，因此小偷是C，且还能知道a，b，d说的是真话(真话就是c是小偷)。#
###其实也可以看出来a不是小偷，因为有3个人说的是真话，第一列出现了3个0，代表有3个人都说a不是小偷

def find_theif1():    ##直接用一维数组保存每个人给出的信息(信息是关于每个人是否是小偷的数组)，再用一维数组保存每个人可能是小偷的情况。
    say1=[0,1,1,1]
    say2=[0,0,1,0]
    say3=[0,0,0,1]
    say4=[1,1,1,0]
    res = []
    for i in range(len(say1)):
        r=say1[i]+say2[i]+say3[i]+say4[i]
        res.append(r)
    return chr(96+res.index(3)+1).upper()+"是小偷"
# print(find_theif1())

def find_theif2():
    say1 = [0, 1, 1, 1]
    say2 = [0, 0, 1, 0]
    say3 = [0, 0, 0, 1]
    say4 = [1, 1, 1, 0]
    for i in range(len(say1)):
        r = say1[i] + say2[i] + say3[i] + say4[i]
        if r==3:
            break
    return chr(96 + i + 1).upper() + "是小偷"
# print(find_theif2())

#####################################################################
#题目五：有一条船共有30个人，船超载，只能载15个人，30个人排成一队，从1开始编号，每数到第8个人，即下船，最后输出下船人的编号
def outputship(lst,k,point,count):    ##使用递归方法
    if len(lst)==15:
        return False
    else:
        while k!=1:
            point+=1
            k-=1
        pos=(point)%len(lst)
        print(f"第{count}次下船的人序号是：",lst[pos])
        lst.pop(pos)
        return outputship(lst,8,pos,count+1)
lst=list(range(1,31))
outputship(lst,8,0,1)
